package com.tarena.test.luban.demo.dubbo;

import com.tarena.demo.luban.cart.api.CartApi;
import org.apache.dubbo.config.ProtocolConfig;
import org.apache.dubbo.config.ReferenceConfig;
import org.apache.dubbo.config.RegistryConfig;
import org.apache.dubbo.config.bootstrap.DubboBootstrap;

public class Consumer {
    public static void main(String[] args) {
        //准备一个启动的dubbo应用boot对象
        DubboBootstrap boot=DubboBootstrap.getInstance();
        //给boot在启动之前配置和provider 几乎是相同的信息
        //1. dubbo应用名称
        boot.application("order-consumer");
        //2. 注册中心 和provider一模一样
        boot.registry(new RegistryConfig("nacos://localhost:8848"));
        //3. 通信协议 dubbo应用不同 端口占用不能相同
        boot.protocol(new ProtocolConfig("dubbo",20991));
        //4. 调用的接口服务功能
        ReferenceConfig<CartApi> referenceConfig=new ReferenceConfig<>();
        referenceConfig.setInterface(CartApi.class);
        boot.reference(referenceConfig);
        //运行当前代码 boot.reference设置了conumer调用需求 接口类 启动后连接
        //nacos获取对方的注册信息,建立底层通信 建立完成后 可以获取代理对象 调用方法
        //5. 获取具有底层连接能力的代理对象
        CartApi cartApi = referenceConfig.get();
        System.out.println("consumer 获取代理:"+cartApi.getClass().getName());
        //调用业务方法
        Boolean delete = cartApi.deleteCart(null);
        System.out.println("远程调用删除购物车,返回结果:"+delete);
    }
}
